9. Docker 용어집 및 구성 요소
용어 정리
1. Daemon (데몬)
정의:
- 백그라운드에서 실행되는 프로세스
- 사용자 상호작용 없이 지속적으로 실행됨
- 시스템 부팅 시 자동 시작되어 서비스 제공
어원:
- Unix/Linux의 "daemon" (수호신, 도우미 영혼)
- 사용자 대신 묵묵히 일하는 프로세스
특징:
일반 프로그램:
사용자 실행 → 작업 수행 → 종료
데몬 프로세스:
시스템 시작 → 백그라운드 실행 → 요청 대기 → 처리 → 계속 실행
예시:
- Docker Daemon (dockerd): Docker 컨테이너 관리
- SSH Daemon (sshd): 원격 접속 처리
- Web Server (httpd, nginx): HTTP 요청 처리
- Database (mysqld, postgres): DB 쿼리 처리
확인 방법:
# 실행 중인 데몬 확인
$ ps aux | grep dockerd
root 1234 0.5 1.2 dockerd
# 데몬 상태 확인
$ systemctl status docker
● docker.service - Docker Application Container Engine
Active: active (running)
명명 규칙:
- 보통 프로그램 이름 끝에 'd' 붙임
dockerd,sshd,httpd,systemd
2. Driver (드라이버)
정의:
- 하드웨어나 소프트웨어 구성 요소를 제어하는 소프트웨어
- 상위 레이어와 하위 레이어 사이의 추상화 계층
- 다양한 구현체를 동일한 인터페이스로 사용 가능
계층 구조:
┌────────────────────────┐
│ 애플리케이션 │
├────────────────────────┤
│ 드라이버 인터페이스 │ ← 표준화된 API
├────────────────────────┤
│ 드라이버 구현체 │ ← 실제 동작
│ (A, B, C 중 선택) │
├────────────────────────┤
│ 하드웨어/시스템 │
└────────────────────────┘
Docker에서의 드라이버:
-
Storage Driver (스토리지 드라이버)
- 역할: 레이어 관리 및 파일시스템 구성
- 종류: overlay2, overlayfs, devicemapper, btrfs
- 선택 기준: OS, 파일시스템, 성능 요구사항
-
Network Driver (네트워크 드라이버)
- 역할: 컨테이너 네트워킹 구현
- 종류: bridge, host, overlay, macvlan, none
- 선택 기준: 단일 호스트 vs 다중 호스트
-
Volume Driver (볼륨 드라이버)
- 역할: 영속적 데이터 저장소 관리
- 종류: local, nfs, cifs, cloud storage
- 선택 기준: 저장소 위치, 공유 필요성
장점:
- 유연성: 환경에 맞는 드라이버 선택
- 확장성: 새로운 드라이버 추가 가능
- 호환성: 인터페이스만 맞으면 교체 가능
예시:
# 현재 사용 중인 스토리지 드라이버 확인
$ docker info | grep "Storage Driver"
Storage Driver: overlay2
# 네트워크 드라이버 확인
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
abc123... bridge bridge local
def456... host host local
3. Component (컴포넌트)
정의:
- 시스템을 구성하는 독립적인 모듈이나 부품
- 특정 기능을 담당하는 소프트웨어 단위
- 다른 컴포넌트와 인터페이스로 통신
특징:
- 모듈성: 독립적으로 개발/테스트 가능
- 재사용성: 여러 시스템에서 사용 가능
- 교체 가능성: 인터페이스만 맞으면 교체 가능
Docker의 주요 컴포넌트:
Docker Engine (전체 시스템)
├─ Docker CLI (사용자 인터페이스 컴포넌트)
├─ Docker Daemon (관리 컴포넌트)
│ ├─ Image Manager (이미지 관리 컴포넌트)
│ ├─ Container Manager (컨테이너 관리 컴포넌트)
│ ├─ Network Manager (네트워크 관리 컴포넌트)
│ └─ Volume Manager (볼륨 관리 컴포넌트)
├─ containerd (컨테이너 런타임 컴포넌트)
└─ runc (OCI 런타임 컴포넌트)
컴포넌트 간 통신:
CLI ←(REST API)→ Daemon ←(gRPC)→ containerd ←(OCI Spec)→ runc
4. Engine (엔진)
정의:
- 여러 컴포넌트를 통합한 완전한 시스템
- 특정 작업을 수행하기 위한 핵심 소프트웨어
- 사용자에게 제공되는 최종 제품
Docker Engine:
Docker Engine = dockerd + containerd + runc + CLI + 부가 기능
다른 엔진 예시:
- Database Engine: MySQL Engine, PostgreSQL Engine
- Game Engine: Unity Engine, Unreal Engine
- Search Engine: Elasticsearch Engine
- JavaScript Engine: V8 Engine, SpiderMonkey
Engine vs Component:
| 구분 | Engine | Component |
|---|---|---|
| 범위 | 전체 시스템 | 부분 기능 |
| 독립성 | 독립 실행 가능 | 다른 컴포넌트 필요 |
| 예시 | Docker Engine | Docker Daemon |
5. Runtime (런타임)
정의:
- 프로그램이 실행되는 환경 또는 실행 시점
- 프로그램 실행에 필요한 라이브러리/도구 모음
두 가지 의미:
1) 실행 환경 (Runtime Environment)
Python 프로그램 실행:
Python 런타임 = Python 인터프리터 + 표준 라이브러리
Java 프로그램 실행:
JRE (Java Runtime Environment) = JVM + 라이브러리
2) 실행 시점 (Runtime vs Compile Time)
Compile Time: 코드 작성 → 컴파일 (빌드 타임)
Runtime: 프로그램 실행 중 (실행 타임)
예: 런타임 에러 = 실행 중에 발생하는 에러
Docker의 런타임:
-
고수준 런타임 (containerd)
- 컨테이너 생명주기 관리
- 이미지 관리
- 추상화 레벨 높음
-
저수준 런타임 (runc)
- 실제 컨테이너 생성
- Linux 커널 기능 직접 호출
- OCI 표준 구현
비유:
고수준 런타임 (containerd):
"이 설계도로 집을 지어줘"
저수준 런타임 (runc):
"시멘트 붓고, 벽돌 쌓고, 지붕 올리기"
6. API (Application Programming Interface)
정의:
- 소프트웨어 간 통신 규약
- 프로그램이 다른 프로그램의 기능을 호출하는 방법
- 내부 구현을 숨기고 인터페이스만 공개
비유:
레스토랑 비유:
- 메뉴판 = API (어떤 기능이 있는지 명세)
- 주문 = API 호출
- 주방 = 내부 구현 (고객은 몰라도 됨)
Docker API:
HTTP 기반 REST API:
GET /containers/json → 컨테이너 목록
POST /containers/create → 컨테이너 생성
POST /containers/{id}/start → 컨테이너 시작
DELETE /containers/{id} → 컨테이너 삭제
API 종류:
- REST API: HTTP 기반 (Docker API)
- gRPC: 고성능 RPC (containerd API)
- GraphQL: 쿼리 기반
- WebSocket API: 양방향 실시간 통신
7. Client-Server (클라이언트-서버)
정의:
- Client: 서비스를 요청하는 쪽
- Server: 서비스를 제공하는 쪽
구조:
┌──────────┐ ┌──────────┐
│ Client │ 요청→ │ Server │
│ │ ←응답 │ │
└──────────┘ └──────────┘
Docker의 Client-Server:
Docker CLI (Client)
↓ "컨테이너 실행해줘"
Docker Daemon (Server)
↓ "알겠습니다, 실행했습니다"
Docker CLI (Client)
특징:
- 분리: 클라이언트와 서버 독립 실행
- 원격 가능: 네트워크로 연결 가능
- 다대일: 여러 클라이언트 → 하나의 서버
8. Manager (매니저)
정의:
- 특정 리소스를 관리하는 컴포넌트
- 생성, 조회, 수정, 삭제(CRUD) 기능 제공
Docker의 Manager:
Docker Daemon 내부:
┌──────────────────┐
│ Image Manager │ → 이미지 관리
├──────────────────┤
│ Container Mgr │ → 컨테이너 관리
├──────────────────┤
│ Network Manager │ → 네트워크 관리
├──────────────────┤
│ Volume Manager │ → 볼륨 관리
└──────────────────┘
9. Specification (스펙, 명세)
정의:
- 시스템이나 프로토콜의 표준 규격
- "이렇게 동작해야 한다"는 약속
- 여러 구현체가 호환되도록 보장
OCI Specification (OCI 명세):
OCI Runtime Spec:
"컨테이너 런타임은 이렇게 동작해야 함"
준수하는 구현체:
- runc (OCI 참조 구현)
- gVisor (Google)
- Kata Containers (OpenStack)
→ 모두 같은 방식으로 사용 가능!
10. Interface (인터페이스)
정의:
- 두 시스템 간 연결점
- 어떻게 통신할지 정의
- 내부 구현은 숨김 (추상화)
Docker의 Interface:
Docker API Interface:
POST /containers/create
→ 내부에서 containerd를 호출하든,
다른 방법을 쓰든 사용자는 모름
Storage Driver Interface:
CreateLayer(), ApplyDiff()...
→ overlay2든 devicemapper든
같은 함수로 호출
용어 간 관계
Docker Engine (엔진)
├─ Docker Daemon (데몬 - 백그라운드 프로세스)
│ ├─ Image Manager (매니저 - 컴포넌트)
│ ├─ Storage Driver (드라이버 - 컴포넌트)
│ └─ Network Driver (드라이버 - 컴포넌트)
├─ containerd (고수준 런타임 - 컴포넌트)
└─ runc (저수준 런타임 - 컴포넌트)
통신:
- Docker API (인터페이스) - Client와 Server 연결
- OCI Spec (명세) - 런타임 표준 정의
Docker 구성도
전체 아키텍처
Docker 전체 구성:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
┌─────────────────────────────────────────────────────────────────┐
│ 사용자 환경 │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Docker CLI (docker 명령어) │ │
│ │ $ docker run / pull / build / ps / exec / logs ... │ │
│ └────────────────────────┬─────────────────────────────────┘ │
└───────────────────────────┼─────────────────────────────────────┘
│ Docker API (REST API over HTTP/Socket)
▼
┌─────────────────────────────────────────────────────────────────┐
│ Docker Daemon (dockerd) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Image Manager Container Manager Network Mgr │ │
│ │ • Pull/Push • Create/Start/Stop • Bridge │ │
│ │ • Build • Pause/Resume • Host │ │
│ │ • Tag/Remove • Remove • Overlay │ │
│ └───────────────────────────────────────────────────────────┘ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Volume Manager Storage Driver BuildKit │ │
│ │ • Create • overlay2/overlayfs • 이미지 빌드 │ │
│ │ • Mount • 레이어 관리 • 캐시 관리 │ │
│ │ • Remove • CoW 파일시스템 • 병렬 빌드 │ │
│ └───────────────────────────────────────────────────────────┘ │
└────────────────────────────┬────────────────────────────────────┘
│ containerd API (gRPC)
▼
┌─────────────────────────────────────────────────────────────────┐
│ containerd (고수준 런타임) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ • 이미지 전송 및 저장 │ │
│ │ • 컨테이너 생명주기 관리 │ │
│ │ • 스냅샷 관리 │ │
│ │ • 네임스페이스/cgroups 인터페이스 │ │
│ └───────────────────────────────────────────────────────────┘ │
└────────────────────────────┬────────────────────────────────────┘
│ OCI Runtime Spec (JSON)
▼
┌─────────────────────────────────────────────────────────────────┐
│ OCI Runtime (저수준 런타임 - runc) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Linux Kernel Features: │ │
│ │ • Namespaces (PID, NET, MNT, UTS, IPC, User) │ │
│ │ • Cgroups (CPU, Memory, I/O, Network) │ │
│ │ • Capabilities (권한 제한) │ │
│ │ • Seccomp (시스템 콜 필터링) │ │
│ └───────────────────────────────────────────────────────────┘ │
└────────────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 격리된 컨테이너 프로세스 │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ • 독립된 PID 네임스페이스 │ │
│ │ • 독립된 네트워크 스택 │ │
│ │ │ • 독립된 파일시스템 (overlayfs) │ │
│ │ • 리소스 제한 적용 (CPU, Memory) │ │
│ └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Docker Registry (외부) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Docker Hub / Private Registry │ │
│ │ • 이미지 저장소 │ │
│ │ • 레이어별 저장/전송 │ │
│ │ • 이미지 태그 관리 │ │
│ └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
Docker 핵심 용어
A. 기본 개념
Container (컨테이너)
- 정의: 애플리케이션과 그 실행 환경을 격리하여 실행하는 독립적인 프로세스
- 특징:
- 호스트 OS의 커널을 공유하지만 프로세스/네트워크/파일시스템은 격리됨
- 이미지로부터 생성되며, 쓰기 가능한 레이어를 가짐
- 가볍고 빠른 시작/중지 가능
- 비유: 집(이미지)의 한 세대(컨테이너), 독립적이지만 건물 구조는 공유
Image (이미지)
- 정의: 컨테이너를 생성하기 위한 읽기 전용 템플릿
- 특징:
- 여러 레이어로 구성된 파일시스템
- Dockerfile로부터 빌드됨
- 변경 불가능(Immutable)
- 레지스트리에 저장/공유 가능
- 구성: 베이스 레이어 + 변경 레이어들의 스택
Dockerfile
- 정의: 이미지를 빌드하기 위한 명령어들을 담은 텍스트 파일
- 주요 명령어:
FROM: 베이스 이미지 지정RUN: 명령어 실행 (새 레이어 생성)COPY/ADD: 파일 복사CMD/ENTRYPOINT: 컨테이너 시작 시 실행할 명령EXPOSE: 포트 노출WORKDIR: 작업 디렉토리 설정ENV: 환경 변수 설정
Registry (레지스트리)
- 정의: 이미지를 저장하고 배포하는 저장소
- 종류:
- Docker Hub: 공식 퍼블릭 레지스트리
- Private Registry: 조직 내부용 레지스트리
- AWS ECR, Google GCR, Azure ACR: 클라우드 레지스트리
- 기능: 이미지 Push/Pull, 버전 관리, 접근 제어
B. 아키텍처 구성 요소
Docker Client (docker CLI)
- 정의: 사용자가 Docker와 상호작용하는 명령줄 도구
- 역할:
- 사용자 명령을 Docker API로 변환
- Docker Daemon과 통신
- 예시:
docker run,docker build,docker ps
Docker Daemon (dockerd)
- 정의: Docker의 핵심 백그라운드 서비스
- 역할:
- Docker API 요청 처리
- 이미지, 컨테이너, 네트워크, 볼륨 관리
- containerd와 통신하여 컨테이너 실행
- 위치:
/usr/bin/dockerd - 소켓:
/var/run/docker.sock(Unix 소켓)
containerd
- 정의: Docker Daemon과 OCI Runtime 사이의 고수준 컨테이너 런타임
- 역할:
- 이미지 전송 및 저장
- 컨테이너 생명주기 관리
- 스냅샷 관리
- 특징: Docker뿐만 아니라 Kubernetes 등에서도 사용됨
- 프로젝트: CNCF (Cloud Native Computing Foundation) 프로젝트
runc (OCI Runtime)
- 정의: OCI 표준을 구현한 저수준 컨테이너 런타임
- 역할:
- Linux 네임스페이스 생성
- cgroups 설정
- 실제 컨테이너 프로세스 실행
- 기술 기반: Linux Kernel 기능 (namespaces, cgroups)
C. 레이어와 스토리지
Layer (레이어)
- 정의: 이미지를 구성하는 파일시스템의 변경 단위
- 특징:
- 읽기 전용(이미지 레이어) 또는 쓰기 가능(컨테이너 레이어)
- 재사용 가능 → 디스크 공간 절약
- tar 아카이브 형식으로 저장
- 예시:
Layer 1: Ubuntu 베이스 (120MB) Layer 2: Node.js 설치 (80MB) Layer 3: 앱 코드 복사 (5MB) Layer 4: 의존성 설치 (30MB)
Storage Driver (스토리지 드라이버)
- 정의: 레이어를 관리하고 컨테이너 파일시스템을 구성하는 드라이버
- 종류:
- overlay2: Linux 기본 드라이버, 가장 효율적
- overlayfs: macOS/Windows Docker Desktop
- devicemapper: 구형 Linux
- btrfs, zfs: 특정 파일시스템용
- 역할: Copy-on-Write (CoW) 구현
Copy-on-Write (CoW)
- 정의: 파일 수정 시 원본을 유지하고 복사본을 생성하는 기법
- 동작:
- 읽기: 하위 레이어에서 직접 읽기
- 쓰기: 상위 레이어로 복사 후 수정
- 장점: 디스크 공간 절약, 빠른 컨테이너 생성
overlayfs
- 정의: Linux 커널의 Union File System
- 구성 요소:
- LowerDir: 읽기 전용 레이어들 (이미지 레이어)
- UpperDir: 쓰기 가능 레이어 (컨테이너 레이어)
- MergedDir: 병합된 뷰 (컨테이너가 보는 파일시스템)
- WorkDir: overlayfs 내부 작업 디렉토리
- 특징: 효율적인 레이어 병합, 빠른 성능
D. 네트워킹
Bridge Network (브릿지 네트워크)
- 정의: 기본 Docker 네트워크 드라이버
- 특징:
- 컨테이너에 private IP 할당
- 같은 브릿지의 컨테이너끼리 통신 가능
- 호스트는
docker0브릿지로 연결
- 사용 사례: 단일 호스트에서 컨테이너 간 통신
Host Network (호스트 네트워크)
- 정의: 컨테이너가 호스트 네트워크를 직접 사용
- 특징:
- 네트워크 격리 없음
- 포트 포워딩 불필요
- 성능 향상
- 사용 사례: 네트워크 성능이 중요한 경우
Overlay Network (오버레이 네트워크)
- 정의: 여러 Docker 호스트를 연결하는 네트워크
- 특징:
- Docker Swarm 모드에서 사용
- VXLAN 기반
- 호스트 간 컨테이너 통신 가능
- 사용 사례: 다중 호스트 클러스터
Port Mapping (포트 매핑)
- 정의: 호스트 포트를 컨테이너 포트로 포워딩
- 문법:
-p 호스트포트:컨테이너포트 - 예시:
-p 8080:80→ 호스트 8080 → 컨테이너 80
E. 볼륨과 스토리지
Volume (볼륨)
- 정의: 컨테이너의 데이터를 영속적으로 저장하는 메커니즘
- 특징:
- Docker가 관리하는 스토리지
- 컨테이너 삭제 후에도 데이터 유지
- 여러 컨테이너 간 공유 가능
- 위치:
/var/lib/docker/volumes/ - 명령어:
docker volume create/ls/rm
Bind Mount (바인드 마운트)
- 정의: 호스트의 특정 경로를 컨테이너에 마운트
- 특징:
- 호스트 파일시스템에 직접 접근
- 개발 환경에서 코드 변경 실시간 반영
- 절대 경로 필요
- 문법:
-v /호스트경로:/컨테이너경로
tmpfs Mount
- 정의: 메모리에 임시 파일시스템 마운트
- 특징:
- 디스크에 저장되지 않음
- 빠른 I/O
- 컨테이너 중지 시 데이터 삭제
- 사용 사례: 민감한 데이터 임시 저장
F. 격리 기술 (Linux Kernel Features)
Namespace (네임스페이스)
- 정의: 프로세스 격리를 위한 Linux 커널 기능
- 종류:
- PID: 프로세스 ID 격리
- NET: 네트워크 인터페이스 격리
- MNT: 파일시스템 마운트 격리
- UTS: 호스트명/도메인 격리
- IPC: 프로세스 간 통신 격리
- USER: 사용자 ID 격리
- 효과: 각 컨테이너가 독립된 환경을 가진 것처럼 보임
cgroups (Control Groups)
- 정의: 리소스 사용량을 제한하고 격리하는 Linux 커널 기능
- 제어 가능한 리소스:
- CPU: CPU 시간 할당
- Memory: 메모리 사용량 제한
- Block I/O: 디스크 I/O 제한
- Network: 네트워크 대역폭 제한
- Docker 옵션:
--cpus,--memory,--memory-swap
Capabilities
- 정의: 루트 권한을 세분화하여 제한하는 기능
- 예시:
CAP_NET_ADMIN: 네트워크 관리CAP_SYS_ADMIN: 시스템 관리CAP_CHOWN: 파일 소유권 변경
- Docker 옵션:
--cap-add,--cap-drop
Seccomp (Secure Computing Mode)
- 정의: 시스템 콜을 필터링하여 보안을 강화하는 기능
- 역할: 위험한 시스템 콜 차단
- Docker: 기본 seccomp 프로필 적용
G. 빌드 관련
BuildKit
- 정의: Docker의 차세대 빌드 엔진
- 특징:
- 병렬 빌드 지원
- 빌드 캐시 최적화
- 멀티 플랫폼 빌드
- 비밀 정보 안전하게 전달
- 활성화:
DOCKER_BUILDKIT=1
Multi-stage Build (멀티 스테이지 빌드)
- 정의: 하나의 Dockerfile에서 여러 단계로 이미지 빌드
- 장점:
- 최종 이미지 크기 감소
- 빌드 도구와 런타임 분리
- 보안 향상 (빌드 의존성 제외)
- 예시:
FROM node:16 AS builder COPY . . RUN npm install && npm build FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html
Build Cache (빌드 캐시)
- 정의: 이전 빌드의 레이어를 재사용하여 빌드 속도 향상
- 동작:
- 명령어와 파일이 동일하면 캐시된 레이어 사용
- 변경 감지 시 해당 레이어부터 다시 빌드
- 최적화 팁: 자주 변경되는 파일은 Dockerfile 하단에 배치
H. 실행 관련
Docker Compose
- 정의: 다중 컨테이너 애플리케이션을 정의하고 실행하는 도구
- 파일:
docker-compose.yml(YAML 형식) - 기능:
- 여러 컨테이너 한 번에 실행
- 네트워크 자동 생성
- 볼륨 관리
- 환경 변수 설정
- 명령어:
docker-compose up/down/ps/logs
Entrypoint vs CMD
- ENTRYPOINT:
- 컨테이너 실행 시 항상 실행되는 명령
- 덮어쓰기 어려움 (의도적 제한)
- CMD:
- 기본 인자 제공
docker run시 쉽게 덮어쓰기 가능
- 조합: ENTRYPOINT로 실행 파일 지정, CMD로 기본 인자 제공
Health Check (헬스 체크)
- 정의: 컨테이너 상태를 주기적으로 확인
- Dockerfile 예시:
HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost/ || exit 1 - 상태:
healthy: 정상unhealthy: 비정상starting: 시작 중
I. OCI 표준
OCI (Open Container Initiative)
- 정의: 컨테이너 표준화를 위한 오픈 소스 프로젝트
- 주요 표준:
- Runtime Specification: 컨테이너 실행 표준
- Image Specification: 이미지 포맷 표준
- Distribution Specification: 이미지 배포 표준
- 목적: 벤더 중립적 컨테이너 표준 확립
OCI Image Format
- 구성:
manifest.json: 이미지 메타데이터config.json: 컨테이너 실행 설정layers/: 레이어 tar 파일들
- 특징: 레지스트리 간 호환성
J. 보안
Root vs Rootless
- Root Mode (기본):
- Docker Daemon이 root 권한으로 실행
- 보안 위험 존재
- Rootless Mode:
- 일반 사용자 권한으로 실행
- 보안 강화, 일부 기능 제한
Docker Content Trust (DCT)
- 정의: 이미지 서명 및 검증 메커니즘
- 기능:
- 이미지 무결성 보장
- 신뢰할 수 있는 이미지만 실행
- 활성화:
DOCKER_CONTENT_TRUST=1
용어 간 관계도
이미지 생성 및 실행 흐름:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. Dockerfile 작성
↓ (docker build)
2. BuildKit이 명령어 해석
↓
3. 레이어별로 이미지 빌드
↓ (Storage Driver가 레이어 저장)
4. 완성된 이미지 (여러 레이어의 스택)
↓ (docker push)
5. Registry에 업로드
↓ (docker pull)
6. 로컬에 이미지 다운로드
↓ (docker run)
7. Docker Daemon이 요청 받음
↓
8. containerd에 컨테이너 생성 요청
↓
9. runc가 네임스페이스/cgroups 설정
↓ (overlayfs로 레이어 병합)
10. 컨테이너 프로세스 실행
↓
11. 실행 중인 컨테이너
• 독립된 네임스페이스
• 제한된 리소스 (cgroups)
• 격리된 파일시스템 (overlayfs)
핵심 정리
Docker = 표준화된 애플리케이션 패키징 및 실행 플랫폼
- 이미지: 읽기 전용 템플릿 (레이어의 스택)
- 컨테이너: 이미지로부터 생성된 실행 환경
- Docker Daemon: 모든 것을 관리하는 중앙 서비스
- OCI Runtime: 실제 격리 환경을 만드는 저수준 도구
- 레이어: 변경 사항의 단위, 재사용으로 효율성 확보
- 네임스페이스: 프로세스 격리
- cgroups: 리소스 제한
- overlayfs: 레이어를 병합하여 단일 파일시스템 제공